// Copyright (c) 2012 Ecma International.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 15.2.3.3-4-179
description: >
    Object.getOwnPropertyDescriptor returns data desc (all false) for
    properties on built-ins (Global.Infinity)
---*/

// in non-strict mode, 'this' is bound to the global object.
function Test() {
    var desc = Object.getOwnPropertyDescriptor(this, "Infinity");

    assert.sameValue(desc.writable, false, 'desc.writable');
    assert.sameValue(desc.enumerable, false, 'desc.enumerable');
    assert.sameValue(desc.configurable, false, 'desc.configurable');
    assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
    assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    const globalObject = this;
    globalObject.Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    const globalObject = this;
    globalObject.Test();
}
